//
//  ProblemOffer58.swift
//  TestProject
//
//  Created by 武侠 on 2021/3/12.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 剑指 Offer 58 - II. 左旋转字符串
 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。

 示例 1：
     输入: s = "abcdefg", k = 2
     输出: "cdefgab"
 示例 2：
     输入: s = "lrloseumgh", k = 6
     输出: "umghlrlose"

 限制：
    1 <= k < s.length <= 10000
 */
@objcMembers class ProblemOffer58: NSObject {
    func solution() {
        print(reverseLeftWordsCharsTwo("abcdefg", 2))
        print(reverseLeftWordsCharsTwo("lrloseumgh", 6))
    }
    
    // 使用系统的方法：
    // prefix(n): 字符串的前n的字符串
    // suffix(n): 字符串的后n的字符串
    func reverseLeftWords(_ s: String, _ n: Int) -> String {
        return String(s.suffix(s.count - n) + s.prefix(n))
    }
    
    // 简单的遍历 一：2次遍历
    func reverseLeftWordsCharsOne(_ s: String, _ n: Int) -> String {
        let chars = Array(s)
        var results:[Character] = []
        for i in n..<s.count {
            results.append(chars[i])
        }
        for i in 0..<n {
            results.append(chars[i])
        }
        
        return String(results)
    }
    
    // 简单的遍历 二：一次遍历
    func reverseLeftWordsCharsTwo(_ s: String, _ n: Int) -> String {
        let chars = Array(s)
        var results:[Character] = []
        for i in n..<(s.count+n) {
            results.append(chars[i % s.count])
        }
        
        return String(results)
    }
    
}
